package cn.peng.stu4teach.pages.qrscan;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsControllerCompat;

import com.google.zxing.Result;
import com.king.camera.scan.AnalyzeResult;
import com.king.camera.scan.CameraScan;
import com.king.camera.scan.analyze.Analyzer;
import com.king.zxing.BarcodeCameraScanActivity;
import com.king.zxing.DecodeConfig;
import com.king.zxing.DecodeFormatManager;
import com.king.zxing.analyze.MultiFormatAnalyzer;

import cn.peng.stu4teach.R;


/**
 * 扫码界面。
 */
public class QrScanActivity extends BarcodeCameraScanActivity {
    @Override
    public void initUI () {
        super.initUI();

        changeStatusBar();

        // 点击返回按钮之后，关闭界面。
        findViewById(R.id.iv_back).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View v) {
                finish();
            }
        });
    }

    @Override
    public Analyzer<Result> createAnalyzer () {
        // 初始化解码配置
        DecodeConfig decodeConfig = new DecodeConfig();
        //如果只有识别二维码的需求，这样设置效率会更高，不设置默认为DecodeFormatManager.DEFAULT_HINTS
        decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS)
                //设置是否全区域识别，默认false
                .setFullAreaScan(false)
                //设置识别区域比例，默认0.8，设置的比例最终会在预览区域裁剪基于此比例的一个矩形进行扫码识别
                .setAreaRectRatio(0.8f)
                //设置识别区域垂直方向偏移量，默认为0，为0表示居中，可以为负数
                .setAreaRectVerticalOffset(0)
                //设置识别区域水平方向偏移量，默认为0，为0表示居中，可以为负数
                .setAreaRectHorizontalOffset(0);
        // BarcodeCameraScanActivity默认使用的MultiFormatAnalyzer，如果只识别二维码，这里可以改为使用QRCodeAnalyzer
        return new MultiFormatAnalyzer(decodeConfig);
    }

    /**
     * 布局ID；通过覆写此方法可以自定义布局
     *
     * @return 布局ID
     */
    @Override
    public int getLayoutId () {
        return R.layout.activity_qr_scan;
    }

    @Override
    public void initCameraScan (@NonNull CameraScan<Result> cameraScan) {
        super.initCameraScan(cameraScan);
        // 根据需要设置CameraScan相关配置
        cameraScan.setPlayBeep(true);
    }

    @Override
    public void onScanResultCallback (@NonNull AnalyzeResult<Result> result) {
        // 停止分析
        getCameraScan().setAnalyzeImage(false);
        // 返回结果
        Intent intent = new Intent();
        intent.putExtra(CameraScan.SCAN_RESULT, result.getResult().getText());
        setResult(Activity.RESULT_OK, intent);
        finish();
    }


    private void changeStatusBar () {
        // 修改状态栏字体颜色，用AndroidX官方兼容API
        WindowInsetsControllerCompat wic = WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
        // true表示Light Mode，状态栏字体呈黑色，反之呈白色
        wic.setAppearanceLightStatusBars(true);
        // 修改状态栏背景颜色，还是通用API，这个比较简单
        getWindow().setStatusBarColor(Color.WHITE);
    }
}
